package com.littleshu.test;


/**
 * 打印出所有的"水仙花数"，所谓"水仙花数"是指一个三位数，其各位数字立方和等于该数本身。例如：
 * 153是一个"水仙花数"，因为153=1的三次方＋5的三次方＋3的三次方。
 * 1.程序分析：利用for循环控制100-999个数，每个数分解出个位，十位，百位
 * 
 * @author littleshu
 *
 */
public class Question3 implements RunTest {
	
	public static void main(String[] args) {
		new Question3().runTest();
	}

	@Override
	public void runTest() {
		for (int i = 100; i < 999; i++) {
			CheckNarcissistic num = new Number(i);
			if (num.isNarcissistic()) {
				System.out.println(i);
			}
		}
	}
	
	class Number implements CheckNarcissistic {

		int num;
		int firstN;
		int secondN;
		int threeN;

		Number(int num) {
			this.num = num;
			// 百位数计算
			this.threeN = this.num / 100;
			// 十位数计算
			this.secondN = (this.num - this.threeN * 100) / 10;
			// 个位数计算
			this.firstN = this.num % 10;
		}

		@Override
		public boolean isNarcissistic() {
			return (Math.pow(this.firstN, 3) + Math.pow(this.secondN, 3) + Math.pow(this.threeN, 3) == this.num);
		}

	}

}

interface CheckNarcissistic {
	boolean isNarcissistic();
}

